#include <iostream>
#include <memory>
#include "UdpServer.hpp"
#include "Dict.hpp"

// 回调函数1 (默认测试函数)
std::string DefaultHandler(const std::string &message) // 默认回调函数
{
    std::string testMessage = "test for callback, " + message;
    return testMessage;
}

// 命令行格式: ./UdpServer ip port
// 例如: ./UdpServer 127.0.0.1 8080
int main(int argc, char *argv[])
{
    // 检查命令行参数格式
    if (argc != 2)
    {
        std::cerr << "Usage: " << argv[0] << " port" << std::endl; // 用户输入错误，给出正确格式提示
        return 1;
    }

    // 由命令行参数获取IP地址和端口号
    /* std::string ip = argv[1]; // IP地址 */
    int port = std::stoi(argv[1]); // 端口号

    Enable_Console_Log_Strategy(); // 启用控制台日志策略

    Dict dict;       // 创建词典对象
    dict.LoadDict(); // 词典对象加载, load

    std::unique_ptr<UdpServer> server = std::make_unique<UdpServer>(/* ip, */ port,
                                                                    [&dict](const std::string &word, InetAddr &addr) -> std::string
                                                                    { return dict.Translate(word, addr); }); // 创建服务器对象, lamda表达式

    server->init();  // 服务器初始化
    server->start(); // 服务器启动

    return 0;
}